<?php

/**
 * Description of Authenticate
 *
 * @author markos
 */

/**
 * Funcionalidades para la autenticacion con el cloudstack.
 * 
 */
class HttpClientAuth {

    protected $_secretKey;
    protected $_apiKey;

    public function __construct() {
        $config = new Zend_Config_Ini(CONFIGURATION_FILE, APPLICATION_ENV);
        $this->_apiKey = $config->get("api_key");
        $this->_secretKey = $config->get("secret_key");
    }

    /**
     * Gnera el signature correspondiente para la autenticacion de las peticiones
     * HTTP al API de cloudstack.
     * 
     * @url http://incubator.apache.org/cloudstack/docs/en-US/Apache_CloudStack/4.0.0-incubating/html/API_Developers_Guide/signing-api-requests.html
     * @param string $query los parametros en el formato correcto (en minusculas 
     * y codificado para URL)
     * @return string signature en formato correcto
     */
    public function generateSignature($queryString) {
        $hash = @hash_hmac("SHA1", $queryString, $this->_secretKey, true);
        $base64encoded = base64_encode($hash);
        return urlencode($base64encoded);
    }

    /**
     * Metodo publico envolvente del generador de signature.
     * 
     * @param string $query los parametros en el formato correcto (en minusculas 
     * y codificado para URL)
     * @return string signature en formato correcto
     */
    public function getSignature($query) {
        return $this->generateSignature($query);
    }

    public function get_secretKey() {
        return $this->_secretKey;
    }

    public function set_secretKey($_secretKey) {
        $this->_secretKey = $_secretKey;
    }

    public function get_apiKey() {
        return $this->_apiKey;
    }

    public function set_apiKey($_apiKey) {
        $this->_apiKey = $_apiKey;
    }

}

?>
